/* 
 * CpfValidator.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.validator;

import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

import br.com.pma.chamatec.exception.ChamatecExceptionCode;
import br.com.pma.chamatec.util.ChamatecUtil;

/**
 * Validator para CPF. 
 *
 * @author Ludemeula Fernandes de Sá
 */
@FacesValidator(value = "cpfValidator")
public class CpfValidator implements Validator {
	/**
	 * @see javax.faces.validator.Validator#validate(javax.faces.context.FacesContext,
	 *      javax.faces.component.UIComponent, java.lang.Object)
	 */
	@Override
	public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
		if (!validaCPF(String.valueOf(value))) {
			ResourceBundle bundle = ResourceBundle.getBundle("/messages");
			String msg = bundle.getString(ChamatecExceptionCode.ME_017.toString());
			FacesMessage facesMessage = new FacesMessage(msg);
			facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
			throw new ValidatorException(facesMessage);
		}
	}

	/**
	 * Realiza a validação do cpf.
	 * 
	 * @param cpf
	 * @return
	 */
	private static boolean validaCPF(String cpf) {
		if (cpf == null || cpf.equals("") || cpf.equals("___________")) {
			return true;
		}

		if (cpf.length() != 11) {
			return false;
		} else {
			try {
				Long.parseLong(cpf);
			} catch (NumberFormatException e) { // CPF não possui somente números
				return false;
			}

			return ChamatecUtil.validarCPF(cpf);
		}
	}
}